<?php
/**
 * 订单自主查询系统 - 安装修复工具
 * 用于解决系统安装和运行中的常见问题
 * 版权所有 © 2025 慕念科技. 保留所有权利.
 */

// 设置页面编码为UTF-8
header('Content-Type: text/html; charset=utf-8');

// 定义常量
define('ROOT_PATH', dirname(__FILE__));

// 页面标题
$pageTitle = '订单自主查询系统 - 安装修复工具';

// 操作结果信息
$message = '';
$messageType = 'success'; // success, error, info

// 处理操作请求
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $action = $_POST['action'] ?? '';
    
    switch ($action) {
        case 'test_db_connection':
            $message = testDbConnection();
            break;
            
        case 'fix_config_file':
            $message = fixConfigFile();
            break;
            
        case 'reset_admin_password':
            $message = resetAdminPassword();
            break;
            
        case 'reset_install_status':
            $message = resetInstallStatus();
            break;
    }
}

/**
 * 测试数据库连接
 * @return string 测试结果消息
 */
function testDbConnection() {
    // 检查配置文件是否存在
    if (!file_exists(ROOT_PATH . '/config.php')) {
        return '<span style="color: red;">错误：配置文件不存在！</span>';
    }
    
    // 加载配置文件
    require_once ROOT_PATH . '/config.php';
    
    // 检查必要的数据库配置常量是否存在
    $requiredConstants = ['DB_HOST', 'DB_USER', 'DB_PASS', 'DB_NAME'];
    $missingConstants = [];
    
    foreach ($requiredConstants as $constant) {
        if (!defined($constant)) {
            $missingConstants[] = $constant;
        }
    }
    
    if (!empty($missingConstants)) {
        return '<span style="color: red;">错误：配置文件缺少必要的数据库常量：' . implode(', ', $missingConstants) . '</span>';
    }
    
    // 如果未定义DB_PORT，设置默认值
    if (!defined('DB_PORT')) {
        define('DB_PORT', 3306);
    }
    
    try {
        // 创建PDO连接
        $dsn = "mysql:host=" . DB_HOST . ";port=" . DB_PORT . ";dbname=" . DB_NAME . ";charset=utf8mb4";
        $options = [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_EMULATE_PREPARES => false,
        ];
        
        $pdo = new PDO($dsn, DB_USER, DB_PASS, $options);
        return '<span style="color: green;">成功：数据库连接测试通过！</span>';
    } catch (PDOException $e) {
        return '<span style="color: red;">错误：数据库连接失败 - ' . $e->getMessage() . '</span>';
    }
}

/**
 * 修复配置文件
 * @return string 修复结果消息
 */
function fixConfigFile() {
    $configPath = ROOT_PATH . '/config.php';
    
    // 检查配置文件是否存在
    if (!file_exists($configPath)) {
        return '<span style="color: red;">错误：配置文件不存在！</span>';
    }
    
    // 读取配置文件内容
    $configContent = file_get_contents($configPath);
    
    // 检查是否已定义DB_PORT
    if (strpos($configContent, 'define(\'DB_PORT\',') === false) {
        // 在DB_HOST定义后添加DB_PORT定义
        $configContent = str_replace(
            'define(\'DB_HOST\', \'' . DB_HOST . '\');',
            'define(\'DB_HOST\', \'' . DB_HOST . '\');
// 数据库端口
define(\'DB_PORT\', 3306);',
            $configContent
        );
        
        // 确保配置文件可写
        if (!is_writable($configPath)) {
            return '<span style="color: red;">错误：配置文件不可写，请检查文件权限！</span>';
        }
        
        // 写入修复后的配置内容
        if (file_put_contents($configPath, $configContent) === false) {
            return '<span style="color: red;">错误：配置文件修复失败！</span>';
        }
    }
    
    return '<span style="color: green;">成功：配置文件修复完成！已确保包含数据库端口定义。</span>';
}

/**
 * 重置管理员密码
 * @return string 重置结果消息
 */
function resetAdminPassword() {
    // 检查配置文件是否存在
    if (!file_exists(ROOT_PATH . '/config.php')) {
        return '<span style="color: red;">错误：配置文件不存在！</span>';
    }
    
    // 加载配置文件
    require_once ROOT_PATH . '/config.php';
    
    // 确保已定义DB_PORT
    if (!defined('DB_PORT')) {
        define('DB_PORT', 3306);
    }
    
    try {
        // 创建PDO连接
        $dsn = "mysql:host=" . DB_HOST . ";port=" . DB_PORT . ";dbname=" . DB_NAME . ";charset=utf8mb4";
        $options = [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_EMULATE_PREPARES => false,
        ];
        
        $pdo = new PDO($dsn, DB_USER, DB_PASS, $options);
        
        // 重置管理员密码为admin888（明文存储）
        $stmt = $pdo->prepare("UPDATE admin_users SET password = :password WHERE id = 1");
        $stmt->execute([':password' => 'admin888']);
        
        return '<span style="color: green;">成功：管理员密码已重置为 admin888，请登录后尽快修改！</span>';
    } catch (PDOException $e) {
        return '<span style="color: red;">错误：管理员密码重置失败 - ' . $e->getMessage() . '</span>';
    }
}

/**
 * 重置安装状态
 * @return string 重置结果消息
 */
function resetInstallStatus() {
    // 安装锁文件路径
    $lockFilePath = ROOT_PATH . '/install/install.lock';
    
    // 检查安装锁文件是否存在
    if (file_exists($lockFilePath)) {
        // 删除安装锁文件
        if (unlink($lockFilePath)) {
            return '<span style="color: green;">成功：安装状态已重置！您现在可以重新运行安装程序。</span>';
        } else {
            return '<span style="color: red;">错误：删除安装锁文件失败，请检查文件权限！</span>';
        }
    } else {
        return '<span style="color: blue;">信息：安装锁文件不存在，系统可能尚未安装。</span>';
    }
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><?php echo $pageTitle; ?></title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body {
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
            background-color: #f5f5f5;
            color: #333;
            line-height: 1.6;
            padding: 20px;
        }
        .container {
            max-width: 800px;
            margin: 0 auto;
            background-color: white;
            border-radius: 10px;
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
            padding: 40px;
        }
        .header {
            text-align: center;
            margin-bottom: 30px;
            padding-bottom: 20px;
            border-bottom: 2px solid #e1e5e9;
        }
        .title {
            font-size: 24px;
            font-weight: bold;
            color: #2c3e50;
            margin-bottom: 10px;
        }
        .subtitle {
            color: #7f8c8d;
            font-size: 16px;
        }
        .menu {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
            gap: 20px;
            margin-bottom: 30px;
        }
        .menu-item {
            background-color: #f8f9fa;
            border: 2px solid #e9ecef;
            border-radius: 8px;
            padding: 20px;
            text-align: center;
            transition: all 0.3s ease;
            cursor: pointer;
        }
        .menu-item:hover {
            background-color: #3498db;
            color: white;
            border-color: #3498db;
            transform: translateY(-2px);
            box-shadow: 0 6px 16px rgba(52, 152, 219, 0.3);
        }
        .menu-item h3 {
            margin-bottom: 10px;
            font-size: 18px;
        }
        .menu-item p {
            font-size: 14px;
            color: #7f8c8d;
            transition: color 0.3s ease;
        }
        .menu-item:hover p {
            color: rgba(255, 255, 255, 0.9);
        }
        .form-action {
            display: none;
            margin-top: 20px;
        }
        .form-action.active {
            display: block;
        }
        .form-group {
            margin-bottom: 20px;
        }
        .btn {
            background-color: #3498db;
            color: white;
            border: none;
            padding: 12px 30px;
            font-size: 16px;
            border-radius: 8px;
            cursor: pointer;
            transition: background-color 0.3s ease;
        }
        .btn:hover {
            background-color: #2980b9;
        }
        .btn-secondary {
            background-color: #95a5a6;
        }
        .btn-secondary:hover {
            background-color: #7f8c8d;
        }
        .message {
            padding: 15px;
            border-radius: 8px;
            margin-bottom: 20px;
            background-color: #d4edda;
            color: #155724;
            border: 1px solid #c3e6cb;
        }
        .footer {
            text-align: center;
            margin-top: 40px;
            padding-top: 20px;
            border-top: 2px solid #e1e5e9;
            color: #95a5a6;
            font-size: 14px;
        }
        .warning {
            background-color: #fff3cd;
            color: #856404;
            border: 1px solid #ffeaa7;
            padding: 15px;
            border-radius: 8px;
            margin-bottom: 30px;
        }
        .note {
            font-style: italic;
            color: #6c757d;
            margin-top: 10px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">
            <h1 class="title">订单自主查询系统 - 安装修复工具</h1>
            <p class="subtitle">用于解决系统安装和运行中的常见问题</p>
        </div>
        
        <div class="warning">
            <strong>注意：</strong>此工具用于修复系统安装问题，操作前请确保已备份重要数据。安装完成后请删除此工具文件。
        </div>
        
        <?php if (!empty($message)): ?>
            <div class="message">
                <?php echo $message; ?>
            </div>
        <?php endif; ?>
        
        <form method="post" action="">
            <div class="menu">
                <div class="menu-item" onclick="selectAction('test_db_connection')">
                    <h3>测试数据库连接</h3>
                    <p>检查数据库配置是否正确，连接是否成功</p>
                </div>
                
                <div class="menu-item" onclick="selectAction('fix_config_file')">
                    <h3>修复配置文件</h3>
                    <p>自动修复配置文件中的常见问题</p>
                </div>
                
                <div class="menu-item" onclick="selectAction('reset_admin_password')">
                    <h3>重置管理员密码</h3>
                    <p>将管理员密码重置为默认值 admin888</p>
                </div>
                
                <div class="menu-item" onclick="selectAction('reset_install_status')">
                    <h3>重置安装状态</h3>
                    <p>删除安装锁文件，允许重新运行安装程序</p>
                </div>
            </div>
            
            <div id="action_form" class="form-action">
                <input type="hidden" name="action" id="action_input">
                <p id="action_description" class="note"></p>
                <button type="submit" class="btn">确认执行</button>
                <button type="button" class="btn btn-secondary" onclick="cancelAction()">取消</button>
            </div>
        </form>
        
        <div class="footer">
            © <?php echo date('Y'); ?> 订单自主查询系统 | 慕念科技
        </div>
    </div>
    
    <script>
        // 操作描述映射
        const actionDescriptions = {
            'test_db_connection': '此操作将检查您的数据库配置是否正确，并尝试建立连接。',
            'fix_config_file': '此操作将修复配置文件中的常见问题，如缺失的数据库端口定义。',
            'reset_admin_password': '此操作将把管理员密码重置为 "admin888"，请在登录后尽快修改密码。',
            'reset_install_status': '此操作将删除安装锁文件，允许您重新运行安装程序。'
        };
        
        // 选择操作
        function selectAction(action) {
            document.getElementById('action_input').value = action;
            document.getElementById('action_description').textContent = actionDescriptions[action];
            document.getElementById('action_form').classList.add('active');
        }
        
        // 取消操作
        function cancelAction() {
            document.getElementById('action_form').classList.remove('active');
            document.getElementById('action_input').value = '';
            document.getElementById('action_description').textContent = '';
        }
        
        // 为菜单项目添加键盘支持
        document.querySelectorAll('.menu-item').forEach(item => {
            item.setAttribute('tabindex', '0');
            item.addEventListener('keydown', function(e) {
                if (e.key === 'Enter' || e.key === ' ') {
                    this.click();
                }
            });
        });
    </script>
</body>
</html>